{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np  \n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['Simhei']  #显示中文\n",
    "plt.rcParams['axes.unicode_minus']=False    #显示负号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#加载数据集\n",
    "def loadDataSet(path):\n",
    "    dataSet = pd.read_csv(path,sep='\\t',header = None)\n",
    "    X = dataSet.iloc[:,:-1].values\n",
    "    y = dataSet.iloc[:,-1].values.T\n",
    "    return X,y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "X,y = loadDataSet('horseColicTraining2.txt')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 2. ,  1. , 38.5, ...,  8.4,  0. ,  0. ],\n",
       "       [ 1. ,  1. , 39.2, ..., 85. ,  2. ,  2. ],\n",
       "       [ 2. ,  1. , 38.3, ...,  6.7,  0. ,  0. ],\n",
       "       ...,\n",
       "       [ 1. ,  1. , 37.5, ...,  6.8,  0. ,  0. ],\n",
       "       [ 1. ,  1. , 36.5, ...,  6. ,  3. ,  3.4],\n",
       "       [ 1. ,  1. , 37.2, ..., 62. ,  1. ,  1. ]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1., -1.,  1., -1., -1.,  1.,  1., -1., -1.,  1.,  1.,  1.,  1.,\n",
       "       -1.,  1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,\n",
       "        1.,  1., -1.,  1., -1., -1.,  1.,  1.,  1., -1., -1.,  1.,  1.,\n",
       "       -1., -1.,  1.,  1., -1., -1., -1.,  1.,  1., -1., -1.,  1., -1.,\n",
       "        1.,  1., -1., -1.,  1., -1., -1., -1.,  1.,  1., -1., -1.,  1.,\n",
       "        1.,  1.,  1.,  1.,  1., -1.,  1., -1., -1., -1., -1.,  1.,  1.,\n",
       "       -1.,  1., -1.,  1.,  1., -1.,  1.,  1., -1., -1.,  1.,  1.,  1.,\n",
       "       -1.,  1., -1.,  1.,  1.,  1., -1.,  1.,  1.,  1., -1.,  1.,  1.,\n",
       "       -1.,  1.,  1.,  1., -1., -1., -1.,  1.,  1., -1.,  1.,  1.,  1.,\n",
       "       -1.,  1.,  1.,  1., -1.,  1., -1., -1.,  1.,  1.,  1., -1.,  1.,\n",
       "       -1., -1.,  1., -1., -1., -1.,  1.,  1.,  1.,  1., -1., -1.,  1.,\n",
       "       -1.,  1.,  1., -1.,  1.,  1.,  1., -1.,  1.,  1.,  1.,  1.,  1.,\n",
       "       -1.,  1.,  1.,  1., -1.,  1., -1.,  1., -1.,  1.,  1.,  1., -1.,\n",
       "        1., -1.,  1., -1., -1.,  1.,  1., -1.,  1., -1., -1.,  1., -1.,\n",
       "        1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1., -1.,  1.,  1.,\n",
       "       -1., -1.,  1.,  1.,  1., -1., -1.,  1.,  1., -1.,  1., -1., -1.,\n",
       "        1., -1., -1.,  1.,  1.,  1.,  1.,  1.,  1., -1.,  1., -1.,  1.,\n",
       "        1.,  1.,  1.,  1., -1.,  1., -1.,  1.,  1., -1.,  1.,  1.,  1.,\n",
       "       -1.,  1.,  1., -1., -1., -1.,  1., -1.,  1.,  1., -1.,  1., -1.,\n",
       "        1.,  1., -1., -1., -1.,  1.,  1., -1., -1., -1.,  1., -1.,  1.,\n",
       "        1.,  1., -1.,  1., -1.,  1.,  1.,  1.,  1., -1.,  1.,  1., -1.,\n",
       "       -1., -1., -1.,  1.,  1.,  1.,  1., -1., -1.,  1.,  1.,  1., -1.,\n",
       "        1.,  1.,  1.,  1., -1., -1., -1.,  1., -1., -1., -1.,  1., -1.])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "def noisyCount( epsilon,sensitivety=1):\n",
    "    beta = sensitivety / epsilon\n",
    "    n_values = []\n",
    "    u1 = np.random.random()\n",
    "    u2 = np.random.random()\n",
    "    if u1 <= 0.5:\n",
    "        n_value = -beta * np.log(1. - u2)\n",
    "    else:\n",
    "        n_value = beta * np.log(u2)\n",
    "    return n_value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "def laplace_mech(data, epsilon, sensitivety=1):\n",
    "    for i in range(len(data)):\n",
    "        data[i] += noisyCount(epsilon,sensitivety)\n",
    "    return data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "outputs": [],
   "source": [
    "#返回分类预测结果  根据阈值所以有两种返回情况\n",
    "\n",
    "def stumpClassify(dataMatrix, dimen, threshVal, threshIneq):\n",
    "    #对数据集每一列的各个特征进行阈值过滤\n",
    "    retArray = np.ones((dataMatrix.shape[0], 1))\n",
    "    #阈值的模式，将小于某一阈值的特征归类为-1\n",
    "    if threshIneq == 'lt':\n",
    "        retArray[dataMatrix[:, dimen] <= threshVal] = -1.0\n",
    "    #将大于某一阈值的特征归类为-1\n",
    "    else:\n",
    "        retArray[dataMatrix[:, dimen] > threshVal] = -1.0\n",
    "    return retArray"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 返回 该弱分类器单层决策树的信息  更新D向量的错误率 更新D向量的预测目标\n",
    "def buildStump(dataArr, classLabels, D):\n",
    "    dataMatrix = np.mat(dataArr)  # 将数据集和标签列表转为矩阵形式\n",
    "    labelMat = np.mat(classLabels).T\n",
    "    m, n = dataMatrix.shape\n",
    "    numSteps = 10.0  # 步长或区间总数 最优决策树信息 最优单层决策树预测结果\n",
    "    bestStump = {}      # 字典用于保存每个分类器信息\n",
    "    bestClasEst = np.mat(np.zeros((m, 1)))\n",
    "    minError = np.inf  # 初始化最小误差最大\n",
    "    for i in range(n):  # 特征循环  （三层循环，遍历所有的可能性）\n",
    "        rangeMin = dataMatrix[:, i].min()\n",
    "        rangeMax = dataMatrix[:, i].max()\n",
    "        stepSize = (rangeMax - rangeMin) / numSteps  #(大-小)/分割数  得到最小值到最大值需要的每一段距离\n",
    "        for j in range(-1, int(numSteps) + 1):  # 遍历步长 最小值到最大值的需要次数\n",
    "            for inequal in ['lt', 'gt']:  # 在大于和小于之间切换\n",
    "                threshVal = (rangeMin + float(j) * stepSize)    #阈值计算公式：最小值+次数*步长  每一次从最小值走的长度\n",
    "                predictedVals = stumpClassify(dataMatrix, i, threshVal,inequal)  # 最优预测目标值  用于与目标值比较得到误差\n",
    "                errArr = np.mat(np.ones((m, 1)))\n",
    "                errArr[predictedVals == labelMat] = 0\n",
    "                weightedError = D.T * errArr\n",
    "                if weightedError < minError:    # 选出最小错误的那个特征\n",
    "                    minError = weightedError    # 最小误差 后面用来更新D权值的\n",
    "                    bestClasEst = predictedVals.copy()  #最优预测值\n",
    "                    bestStump['dim'] = i    # 特征\n",
    "                    bestStump['thresh'] = threshVal # 到最小值的距离 （得到最优预测值的那个距离）\n",
    "                    bestStump['ineq'] = inequal     # 大于还是小于 最优距离为-1\n",
    "    return bestStump, minError, bestClasEst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 循环构建numIt个弱分类器\n",
    "def adaBoostTrainDS(dataArr, classLabels, numIt=40):\n",
    "    weakClassArr = []               # 保存弱分类器数组\n",
    "    m = dataArr.shape[0]\n",
    "    D = np.mat(np.ones((m, 1)) / m)       # D向量 每条样本所对应的一个权重\n",
    "    aggClassEst = np.mat(np.zeros((m, 1)))    # 统计类别估计累积值\n",
    "    for i in range(numIt):\n",
    "        bestStump, error, classEst = buildStump(dataArr, classLabels, D)\n",
    "        alpha = float(0.5 * np.log((1.0 - error) / max(error, 1e-16)))\n",
    "        bestStump['alpha'] = alpha\n",
    "        weakClassArr.append(bestStump)  # 加入单层决策树\n",
    "\n",
    "        # 得到运算公式中的向量+/-α，预测正确为-α，错误则+α。每条样本一个α\n",
    "        # multiply对应位置相乘  这里很聪明，用-1*真实目标值*预测值，实现了错误分类则-，正确则+\n",
    "        expon = np.multiply(-1 * alpha * np.mat(classLabels).T, classEst)\n",
    "        D = np.multiply(D, np.exp(expon))         # 这三步为更新概率分布D向量 拆分开来了，每一步与公式相同\n",
    "        D = D / D.sum()\n",
    "\n",
    "        #计算停止条件错误率=0 以及计算每次的aggClassEst类别估计累计值\n",
    "        aggClassEst += alpha * classEst\n",
    "        \n",
    "        # 很聪明的计算方法 计算得到错误的个数，向量中为1则错误值\n",
    "        aggErrors = np.multiply(np.sign(aggClassEst) != np.mat(classLabels).T, np.ones((m, 1))) # sign返回数值的正负符号，以1、-1表示\n",
    "        errorRate = aggErrors.sum() / m # 错误个数/总个数\n",
    "\n",
    "        # print(\"错误率：\", errorRate)\n",
    "        if errorRate == 0.0:\n",
    "            break\n",
    "    return weakClassArr, aggClassEst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 预测 累加 多个弱分类器获得预测值*该alpha 得到 结果\n",
    "def AdaClassify(datToClass, classifierArr):     #classifierArr是元组，所以在取值时需要注意\n",
    "    dataMatrix = np.mat(datToClass)\n",
    "    m = dataMatrix.shape[0]\n",
    "    aggClassEst = np.mat(np.zeros((m, 1)))\n",
    "\n",
    "    # 循环所有弱分类器\n",
    "    for i in range(len(classifierArr[0])):\n",
    "        # 获得预测结果\n",
    "        classEst = stumpClassify(dataMatrix, classifierArr[0][i]['dim'],classifierArr[0][i]['thresh'],classifierArr[0][i]['ineq'])\n",
    "        # 该分类器α*预测结果 用于累加得到最终的正负判断条件\n",
    "        aggClassEst += classifierArr[0][i]['alpha'] * classEst  # 这里就是集合所有弱分类器的意见，得到最终的意见\n",
    "        re = np.sign(aggClassEst)    # 提取数据符号\n",
    "    return re,aggClassEst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "#添加噪音\n",
    "# 预测 累加 多个弱分类器获得预测值*该alpha 得到 结果\n",
    "def DPsAdaClassify(datToClass, classifierArr,epsilon):     #classifierArr是元组，所以在取值时需要注意\n",
    "    dataMatrix = np.mat(datToClass)\n",
    "    m = dataMatrix.shape[0]\n",
    "    aggClassEst = np.mat(np.zeros((m, 1)))\n",
    "\n",
    "    # 循环所有弱分类器\n",
    "    for i in range(len(classifierArr[0])):\n",
    "        # 获得预测结果\n",
    "        classEst = stumpClassify(dataMatrix, classifierArr[0][i]['dim'],classifierArr[0][i]['thresh'],classifierArr[0][i]['ineq'])\n",
    "        #添加噪音\n",
    "        classEst = laplace_mech(classEst, epsilon, sensitivety=1)\n",
    "        \n",
    "        # 该分类器α*预测结果 用于累加得到最终的正负判断条件\n",
    "        aggClassEst += classifierArr[0][i]['alpha'] * classEst  # 这里就是集合所有弱分类器的意见，得到最终的意见\n",
    "        re = np.sign(aggClassEst)    # 提取数据符号\n",
    "    return re,aggClassEst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "datArr,labelArr = loadDataSet('horseColicTraining2.txt')\n",
    "classifierArr = adaBoostTrainDS(datArr,labelArr,numIt=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "testArr,testLabelArr = loadDataSet('horseColicTest2.txt')\n",
    "pred10,agg = AdaClassify(testArr,classifierArr)\n",
    "DPpred10,DPagg = DPsAdaClassify(testArr,classifierArr,epsilon=0.5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7611940298507462\n",
      "0.5970149253731343\n"
     ]
    }
   ],
   "source": [
    "acc1 = (testLabelArr == pred10.T).sum()/len(testLabelArr)\n",
    "print(acc1) # 打印模型准确率\n",
    "\n",
    "acc2 = (testLabelArr == DPpred10.T).sum()/len(testLabelArr)\n",
    "print(acc2) # 打印模型准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5671641791044776\n",
      "0.47761194029850745\n",
      "0.44776119402985076\n",
      "0.6865671641791045\n",
      "0.5970149253731343\n",
      "0.5970149253731343\n"
     ]
    }
   ],
   "source": [
    "epsilon = [0.05,0.1,0.25,0.5,0.75,1]\n",
    "for e in epsilon:\n",
    "    classifierArr = adaBoostTrainDS(datArr,labelArr,numIt=10)\n",
    "    prediction10,agg= DPsAdaClassify(testArr,classifierArr,e)\n",
    "    acc = (testLabelArr == prediction10.T).sum()/len(testLabelArr)\n",
    "    print(acc) # 打印模型准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ROC曲线：模型评估\n",
    "# AUC就是曲线下面积，在比较不同的分类模型时，可以将每个模型的ROC曲线都画出来，比较曲线下面积做为模型优劣的指标。\n",
    "# AUC值越大的分类器，正确率越高。\n",
    "def plotROC(predStrengths, classLabels):    # 类别累计值、目标标签\n",
    "    cur = (1.0, 1.0)  # 每次画线的起点游标点\n",
    "    ySum = 0.0  # 用于计算AUC的值 矩形面积的高度累计值\n",
    "    numPosClas = sum(np.array(classLabels) == 1.0)     # 所有真实正例    确定了在y坐标轴上的步进数目\n",
    "    yStep = 1 / float(numPosClas)                           # 1/所有真实正例 y轴上的步长\n",
    "    xStep = 1 / float(len(classLabels) - numPosClas)        # 1/所有真实反例 x轴上的步长\n",
    "    sortedIndicies = predStrengths.argsort()  # 获得累计值向量从小到大排序的下表index [50,88,2,71...]\n",
    "    fig = plt.figure()\n",
    "    fig.clf()\n",
    "    ax = plt.subplot(111)\n",
    "    # 循环所有的累计值 从小到大\n",
    "    for index in sortedIndicies.tolist()[0]:\n",
    "        if classLabels[index] == 1.0:\n",
    "            delX = 0                    #若为一个真正例，则沿y降一个步长，即不断降低真阳率；\n",
    "            delY = yStep                #若为一个非真正例，则沿x退一个步长，尖笑阳率\n",
    "        else:\n",
    "            delX = xStep\n",
    "            delY = 0\n",
    "            ySum += cur[1]      #向下移动一次，则累计一个高度。宽度不变，我们只计算高度\n",
    "        ax.plot([cur[0], cur[0] - delX], [cur[1], cur[1] - delY], c='b',alpha=0.8)    # 始终会有一个点是没有改变的\n",
    "        cur = (cur[0] - delX, cur[1] - delY)\n",
    "    ax.plot([0, 1], [0, 1], 'r--',alpha=0.8)\n",
    "    plt.xlabel('False positive rate',fontsize=12)\n",
    "    plt.ylabel('True positive rate',fontsize=12)\n",
    "    plt.title('ROC curve for AdaBoost',fontsize=15)\n",
    "    ax.axis([0, 1, 0, 1])\n",
    "    plt.show()\n",
    "    print(\"the Area Under the Curve is: \", ySum * xStep)  # AUC面积我们以 高*低 的矩形来计算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the Area Under the Curve is:  0.8582969635063604\n"
     ]
    }
   ],
   "source": [
    "#未加噪音ROC曲线\n",
    "datArr,labelArr = loadDataSet('horseColicTraining2.txt')\n",
    "classifierArr = adaBoostTrainDS(datArr,labelArr,numIt=10)\n",
    "pred10,agg = AdaClassify(datArr,classifierArr)\n",
    "plotROC(agg.T,labelArr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the Area Under the Curve is:  0.6521961184882524\n"
     ]
    }
   ],
   "source": [
    "#加噪音ROC曲线\n",
    "datArr,labelArr = loadDataSet('horseColicTraining2.txt')\n",
    "classifierArr = adaBoostTrainDS(datArr,labelArr,numIt=10)\n",
    "DPpred10,DPagg = DPsAdaClassify(datArr,classifierArr,epsilon=0.5)\n",
    "plotROC(DPagg.T,labelArr)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Adult数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd \n",
    "from sklearn.preprocessing import OrdinalEncoder #分类特征编码包\n",
    "from sklearn.model_selection import train_test_split #训练集和测试集切分包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>39</td>\n",
       "      <td>State-gov</td>\n",
       "      <td>77516</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>2174</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>50</td>\n",
       "      <td>Self-emp-not-inc</td>\n",
       "      <td>83311</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Exec-managerial</td>\n",
       "      <td>Husband</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>13</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>38</td>\n",
       "      <td>Private</td>\n",
       "      <td>215646</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Divorced</td>\n",
       "      <td>Handlers-cleaners</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>53</td>\n",
       "      <td>Private</td>\n",
       "      <td>234721</td>\n",
       "      <td>11th</td>\n",
       "      <td>7</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Handlers-cleaners</td>\n",
       "      <td>Husband</td>\n",
       "      <td>Black</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28</td>\n",
       "      <td>Private</td>\n",
       "      <td>338409</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Married-civ-spouse</td>\n",
       "      <td>Prof-specialty</td>\n",
       "      <td>Wife</td>\n",
       "      <td>Black</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>Cuba</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   0                  1       2           3   4                    5   \\\n",
       "0  39          State-gov   77516   Bachelors  13        Never-married   \n",
       "1  50   Self-emp-not-inc   83311   Bachelors  13   Married-civ-spouse   \n",
       "2  38            Private  215646     HS-grad   9             Divorced   \n",
       "3  53            Private  234721        11th   7   Married-civ-spouse   \n",
       "4  28            Private  338409   Bachelors  13   Married-civ-spouse   \n",
       "\n",
       "                   6               7       8        9     10  11  12  \\\n",
       "0        Adm-clerical   Not-in-family   White     Male  2174   0  40   \n",
       "1     Exec-managerial         Husband   White     Male     0   0  13   \n",
       "2   Handlers-cleaners   Not-in-family   White     Male     0   0  40   \n",
       "3   Handlers-cleaners         Husband   Black     Male     0   0  40   \n",
       "4      Prof-specialty            Wife   Black   Female     0   0  40   \n",
       "\n",
       "               13      14  \n",
       "0   United-States   <=50K  \n",
       "1   United-States   <=50K  \n",
       "2   United-States   <=50K  \n",
       "3   United-States   <=50K  \n",
       "4            Cuba   <=50K  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('data/adult.txt',header=None)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(32561, 15)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.shape #数据集的大小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.isnull().sum().sum() #确认数据集没有缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       " <=50K    24720\n",
       " >50K      7841\n",
       "Name: 14, dtype: int64"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#确认是否有样本不均衡问题\n",
    "df.iloc[:,-1].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21</td>\n",
       "      <td>Private</td>\n",
       "      <td>34506</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Separated</td>\n",
       "      <td>Other-service</td>\n",
       "      <td>Own-child</td>\n",
       "      <td>White</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>35</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>26</td>\n",
       "      <td>Private</td>\n",
       "      <td>183965</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Craft-repair</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>29</td>\n",
       "      <td>Private</td>\n",
       "      <td>253003</td>\n",
       "      <td>HS-grad</td>\n",
       "      <td>9</td>\n",
       "      <td>Never-married</td>\n",
       "      <td>Handlers-cleaners</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>16</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60</td>\n",
       "      <td>Private</td>\n",
       "      <td>227332</td>\n",
       "      <td>Assoc-voc</td>\n",
       "      <td>11</td>\n",
       "      <td>Widowed</td>\n",
       "      <td>Adm-clerical</td>\n",
       "      <td>Not-in-family</td>\n",
       "      <td>White</td>\n",
       "      <td>Male</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28</td>\n",
       "      <td>Private</td>\n",
       "      <td>90915</td>\n",
       "      <td>Bachelors</td>\n",
       "      <td>13</td>\n",
       "      <td>Married-spouse-absent</td>\n",
       "      <td>Tech-support</td>\n",
       "      <td>Unmarried</td>\n",
       "      <td>Black</td>\n",
       "      <td>Female</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>40</td>\n",
       "      <td>United-States</td>\n",
       "      <td>&lt;=50K</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   0         1       2           3   4                       5   \\\n",
       "0  21   Private   34506     HS-grad   9               Separated   \n",
       "1  26   Private  183965     HS-grad   9           Never-married   \n",
       "2  29   Private  253003     HS-grad   9           Never-married   \n",
       "3  60   Private  227332   Assoc-voc  11                 Widowed   \n",
       "4  28   Private   90915   Bachelors  13   Married-spouse-absent   \n",
       "\n",
       "                   6               7       8        9   10  11  12  \\\n",
       "0       Other-service       Own-child   White   Female   0   0  35   \n",
       "1        Craft-repair   Not-in-family   White     Male   0   0  40   \n",
       "2   Handlers-cleaners   Not-in-family   White     Male   0   0  16   \n",
       "3        Adm-clerical   Not-in-family   White     Male   0   0  40   \n",
       "4        Tech-support       Unmarried   Black   Female   0   0  40   \n",
       "\n",
       "               13      14  \n",
       "0   United-States   <=50K  \n",
       "1   United-States   <=50K  \n",
       "2   United-States   <=50K  \n",
       "3   United-States   <=50K  \n",
       "4   United-States   <=50K  "
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#解决样本不均衡问题：这里采用下采样(将多数类的数量减少)\n",
    "df0 = df[df.iloc[:,-1]==' <=50K'].sample(8000) \n",
    "df1 = df[df.iloc[:,-1]!=' <=50K']\n",
    "\n",
    "df_adult = pd.concat([df0,df1])\n",
    "df_adult.index = range(df_adult.shape[0])\n",
    "df_adult.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "#对文本型特征进行编码\n",
    "for i in range(df_adult.shape[1]-1):  #对每一列特征进行循环\n",
    "    if df_adult.iloc[:,i].dtype=='O': #判断特征中的对象是否是文本型\n",
    "        #对分类型特征进行编码\n",
    "        df_adult.iloc[:,i] = OrdinalEncoder().fit_transform(df_adult.iloc[:,i].values.reshape(-1, 1))\n",
    "    else:\n",
    "        #把整数型特征变为float,加快后面的计算\n",
    "        df_adult.iloc[:,i] = df_adult.iloc[:,i].astype('float64')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "#对标签进行编码，正样本('<=50K')为1，负样本('>50K')为-1\n",
    "df_adult.iloc[:,-1]=[1.0 if label.strip() == '<=50K' else -1.0 for label in df_adult.iloc[:,-1]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>34506.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>26.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>183965.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>29.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>253003.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>227332.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>90915.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     0    1         2     3     4    5     6    7    8    9    10   11    12  \\\n",
       "0  21.0  4.0   34506.0  11.0   9.0  5.0   8.0  3.0  4.0  0.0  0.0  0.0  35.0   \n",
       "1  26.0  4.0  183965.0  11.0   9.0  4.0   3.0  1.0  4.0  1.0  0.0  0.0  40.0   \n",
       "2  29.0  4.0  253003.0  11.0   9.0  4.0   6.0  1.0  4.0  1.0  0.0  0.0  16.0   \n",
       "3  60.0  4.0  227332.0   8.0  11.0  6.0   1.0  1.0  4.0  1.0  0.0  0.0  40.0   \n",
       "4  28.0  4.0   90915.0   9.0  13.0  3.0  13.0  4.0  2.0  0.0  0.0  0.0  40.0   \n",
       "\n",
       "     13   14  \n",
       "0  38.0  1.0  \n",
       "1  38.0  1.0  \n",
       "2  38.0  1.0  \n",
       "3  38.0  1.0  \n",
       "4  38.0  1.0  "
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_adult.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "#提取特征矩阵和标签\n",
    "X = df_adult.iloc[:,:-1]\n",
    "y = df_adult.iloc[:,-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>34506.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>26.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>183965.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>29.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>253003.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>60.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>227332.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>28.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>90915.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>51.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>291755.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>20.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>247794.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>84.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>34.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>182401.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>42.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>103932.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>18.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>130849.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>26.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>272618.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>20.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>181370.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>50.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>266945.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3137.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>38.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>198867.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>32.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>53373.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>36.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>41.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>444743.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>35.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>67728.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2051.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>28.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>249870.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>57.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>165881.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>20.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>148294.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>28.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>496526.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>30.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>176871.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>52.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>198262.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>30.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>49.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>91251.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>48.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>177775.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>30.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>115963.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>20.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>306710.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>41.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>227644.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>24.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>205844.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>76.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>79445.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1173.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15811</th>\n",
       "      <td>37.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>40955.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15812</th>\n",
       "      <td>66.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>102686.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15813</th>\n",
       "      <td>30.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>176185.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15814</th>\n",
       "      <td>53.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>304504.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1887.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15815</th>\n",
       "      <td>44.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>71556.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15816</th>\n",
       "      <td>46.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>42251.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15817</th>\n",
       "      <td>36.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>109133.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15818</th>\n",
       "      <td>33.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>139057.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15819</th>\n",
       "      <td>36.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>237943.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1977.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15820</th>\n",
       "      <td>48.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>185041.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>7298.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15821</th>\n",
       "      <td>45.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>173664.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15822</th>\n",
       "      <td>37.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>121521.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>15024.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15823</th>\n",
       "      <td>36.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>186819.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>52.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15824</th>\n",
       "      <td>41.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>201495.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15825</th>\n",
       "      <td>50.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>208630.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15826</th>\n",
       "      <td>38.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>32916.0</td>\n",
       "      <td>8.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15827</th>\n",
       "      <td>39.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>107302.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15828</th>\n",
       "      <td>46.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>42972.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15829</th>\n",
       "      <td>57.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>110417.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>99999.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15830</th>\n",
       "      <td>46.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>364548.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15831</th>\n",
       "      <td>35.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>320084.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15832</th>\n",
       "      <td>34.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>204461.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>60.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15833</th>\n",
       "      <td>54.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>337992.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>23.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15834</th>\n",
       "      <td>34.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>160216.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>55.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15835</th>\n",
       "      <td>38.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>139180.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15020.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15836</th>\n",
       "      <td>71.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>287372.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15837</th>\n",
       "      <td>39.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>111499.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15838</th>\n",
       "      <td>53.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>321865.0</td>\n",
       "      <td>12.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15839</th>\n",
       "      <td>40.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>154374.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>7.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15840</th>\n",
       "      <td>52.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>287927.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>15024.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>40.0</td>\n",
       "      <td>38.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>15841 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         0    1         2     3     4    5     6    7    8    9        10  \\\n",
       "0      21.0  4.0   34506.0  11.0   9.0  5.0   8.0  3.0  4.0  0.0      0.0   \n",
       "1      26.0  4.0  183965.0  11.0   9.0  4.0   3.0  1.0  4.0  1.0      0.0   \n",
       "2      29.0  4.0  253003.0  11.0   9.0  4.0   6.0  1.0  4.0  1.0      0.0   \n",
       "3      60.0  4.0  227332.0   8.0  11.0  6.0   1.0  1.0  4.0  1.0      0.0   \n",
       "4      28.0  4.0   90915.0   9.0  13.0  3.0  13.0  4.0  2.0  0.0      0.0   \n",
       "5      51.0  6.0  291755.0   5.0   4.0  2.0   4.0  0.0  4.0  1.0      0.0   \n",
       "6      20.0  4.0  247794.0  11.0   9.0  4.0  12.0  1.0  4.0  0.0      0.0   \n",
       "7      34.0  4.0  182401.0   7.0  12.0  0.0   1.0  1.0  2.0  1.0      0.0   \n",
       "8      42.0  4.0  103932.0   8.0  11.0  0.0  10.0  4.0  4.0  0.0      0.0   \n",
       "9      18.0  4.0  130849.0   1.0   7.0  4.0   8.0  3.0  4.0  0.0      0.0   \n",
       "10     26.0  4.0  272618.0   9.0  13.0  2.0  12.0  0.0  4.0  1.0      0.0   \n",
       "11     20.0  4.0  181370.0  15.0  10.0  4.0   8.0  3.0  2.0  1.0      0.0   \n",
       "12     50.0  4.0  266945.0  11.0   9.0  2.0   7.0  5.0  4.0  0.0   3137.0   \n",
       "13     38.0  6.0  198867.0   1.0   7.0  2.0   3.0  0.0  4.0  1.0      0.0   \n",
       "14     32.0  4.0   53373.0  15.0  10.0  2.0   3.0  0.0  4.0  1.0      0.0   \n",
       "15     41.0  4.0  444743.0  11.0   9.0  0.0  13.0  4.0  4.0  0.0      0.0   \n",
       "16     35.0  4.0   67728.0  15.0  10.0  2.0   3.0  0.0  4.0  1.0      0.0   \n",
       "17     28.0  4.0  249870.0  14.0  15.0  4.0  10.0  1.0  2.0  1.0      0.0   \n",
       "18     57.0  5.0  165881.0  14.0  15.0  2.0  10.0  0.0  4.0  1.0      0.0   \n",
       "19     20.0  4.0  148294.0  15.0  10.0  4.0   8.0  3.0  4.0  1.0      0.0   \n",
       "20     28.0  4.0  496526.0  11.0   9.0  4.0   1.0  1.0  4.0  0.0      0.0   \n",
       "21     30.0  4.0  176871.0  15.0  10.0  5.0   1.0  4.0  2.0  0.0      0.0   \n",
       "22     52.0  8.0  198262.0  11.0   9.0  2.0   1.0  5.0  4.0  0.0      0.0   \n",
       "23     49.0  4.0   91251.0  11.0   9.0  2.0   8.0  0.0  1.0  1.0      0.0   \n",
       "24     48.0  4.0  177775.0  11.0   9.0  0.0   4.0  1.0  4.0  0.0      0.0   \n",
       "25     30.0  4.0  115963.0   5.0   4.0  4.0   7.0  4.0  4.0  1.0      0.0   \n",
       "26     20.0  6.0  306710.0  11.0   9.0  4.0   5.0  3.0  4.0  1.0      0.0   \n",
       "27     41.0  2.0  227644.0  15.0  10.0  2.0   3.0  0.0  4.0  1.0      0.0   \n",
       "28     24.0  4.0  205844.0   9.0  13.0  4.0   4.0  3.0  2.0  0.0      0.0   \n",
       "29     76.0  0.0   79445.0   0.0   6.0  2.0   0.0  0.0  4.0  1.0   1173.0   \n",
       "...     ...  ...       ...   ...   ...  ...   ...  ...  ...  ...      ...   \n",
       "15811  37.0  4.0   40955.0  14.0  15.0  2.0  10.0  0.0  4.0  1.0      0.0   \n",
       "15812  66.0  6.0  102686.0  12.0  14.0  2.0   4.0  0.0  4.0  1.0      0.0   \n",
       "15813  30.0  6.0  176185.0  15.0  10.0  3.0   3.0  3.0  4.0  1.0      0.0   \n",
       "15814  53.0  4.0  304504.0  15.0  10.0  2.0  14.0  0.0  4.0  1.0      0.0   \n",
       "15815  44.0  5.0   71556.0  12.0  14.0  2.0  12.0  0.0  4.0  1.0      0.0   \n",
       "15816  46.0  4.0   42251.0  15.0  10.0  2.0  12.0  0.0  4.0  1.0      0.0   \n",
       "15817  36.0  6.0  109133.0   9.0  13.0  2.0  12.0  0.0  4.0  1.0      0.0   \n",
       "15818  33.0  4.0  139057.0  12.0  14.0  2.0  13.0  0.0  1.0  1.0      0.0   \n",
       "15819  36.0  4.0  237943.0   9.0  13.0  2.0  10.0  0.0  4.0  1.0      0.0   \n",
       "15820  48.0  5.0  185041.0  11.0   9.0  2.0   3.0  0.0  4.0  1.0   7298.0   \n",
       "15821  45.0  5.0  173664.0   9.0  13.0  2.0   4.0  0.0  4.0  1.0      0.0   \n",
       "15822  37.0  4.0  121521.0  14.0  15.0  2.0  10.0  0.0  4.0  1.0  15024.0   \n",
       "15823  36.0  4.0  186819.0   7.0  12.0  2.0   3.0  0.0  4.0  1.0      0.0   \n",
       "15824  41.0  4.0  201495.0  12.0  14.0  2.0   4.0  0.0  4.0  1.0      0.0   \n",
       "15825  50.0  4.0  208630.0  12.0  14.0  0.0  12.0  1.0  4.0  0.0      0.0   \n",
       "15826  38.0  4.0   32916.0   8.0  11.0  2.0   3.0  0.0  4.0  1.0      0.0   \n",
       "15827  39.0  4.0  107302.0  11.0   9.0  2.0  10.0  0.0  4.0  1.0      0.0   \n",
       "15828  46.0  4.0   42972.0  12.0  14.0  2.0  10.0  5.0  4.0  0.0      0.0   \n",
       "15829  57.0  2.0  110417.0  11.0   9.0  2.0   3.0  0.0  4.0  1.0  99999.0   \n",
       "15830  46.0  4.0  364548.0  15.0  10.0  2.0   4.0  0.0  4.0  1.0      0.0   \n",
       "15831  35.0  0.0  320084.0   9.0  13.0  2.0   0.0  5.0  4.0  0.0      0.0   \n",
       "15832  34.0  4.0  204461.0  10.0  16.0  2.0  10.0  0.0  4.0  1.0      0.0   \n",
       "15833  54.0  4.0  337992.0   9.0  13.0  2.0   4.0  0.0  1.0  1.0      0.0   \n",
       "15834  34.0  4.0  160216.0   9.0  13.0  4.0   4.0  1.0  4.0  0.0      0.0   \n",
       "15835  38.0  4.0  139180.0   9.0  13.0  0.0  10.0  4.0  2.0  0.0  15020.0   \n",
       "15836  71.0  0.0  287372.0  10.0  16.0  2.0   0.0  0.0  4.0  1.0      0.0   \n",
       "15837  39.0  2.0  111499.0   7.0  12.0  2.0   1.0  5.0  4.0  0.0      0.0   \n",
       "15838  53.0  4.0  321865.0  12.0  14.0  2.0   4.0  0.0  4.0  1.0      0.0   \n",
       "15839  40.0  4.0  154374.0  11.0   9.0  2.0   7.0  0.0  4.0  1.0      0.0   \n",
       "15840  52.0  5.0  287927.0  11.0   9.0  2.0   4.0  5.0  4.0  0.0  15024.0   \n",
       "\n",
       "           11    12    13  \n",
       "0         0.0  35.0  38.0  \n",
       "1         0.0  40.0  38.0  \n",
       "2         0.0  16.0  38.0  \n",
       "3         0.0  40.0  38.0  \n",
       "4         0.0  40.0  38.0  \n",
       "5         0.0  42.0  38.0  \n",
       "6         0.0  84.0  38.0  \n",
       "7         0.0  40.0  38.0  \n",
       "8         0.0  40.0  38.0  \n",
       "9         0.0   8.0  38.0  \n",
       "10        0.0  55.0  38.0  \n",
       "11        0.0  40.0  38.0  \n",
       "12        0.0  40.0   8.0  \n",
       "13        0.0  40.0  38.0  \n",
       "14        0.0  36.0  38.0  \n",
       "15        0.0  40.0  38.0  \n",
       "16     2051.0  45.0  38.0  \n",
       "17        0.0  50.0  38.0  \n",
       "18        0.0  40.0  38.0  \n",
       "19        0.0  40.0  38.0  \n",
       "20        0.0  40.0  38.0  \n",
       "21        0.0  40.0  38.0  \n",
       "22        0.0  30.0  38.0  \n",
       "23        0.0  40.0   3.0  \n",
       "24        0.0  40.0  38.0  \n",
       "25        0.0  42.0  38.0  \n",
       "26        0.0  40.0  38.0  \n",
       "27        0.0  40.0  38.0  \n",
       "28        0.0  40.0  38.0  \n",
       "29        0.0  40.0  38.0  \n",
       "...       ...   ...   ...  \n",
       "15811     0.0  50.0  38.0  \n",
       "15812     0.0  20.0  38.0  \n",
       "15813     0.0  60.0  38.0  \n",
       "15814  1887.0  45.0  38.0  \n",
       "15815     0.0  50.0   0.0  \n",
       "15816     0.0  45.0  38.0  \n",
       "15817     0.0  50.0  38.0  \n",
       "15818     0.0  50.0  38.0  \n",
       "15819  1977.0  45.0  38.0  \n",
       "15820     0.0  50.0  38.0  \n",
       "15821     0.0  45.0  38.0  \n",
       "15822     0.0  45.0  38.0  \n",
       "15823     0.0  52.0  38.0  \n",
       "15824     0.0  40.0  38.0  \n",
       "15825     0.0  50.0  38.0  \n",
       "15826     0.0  55.0  38.0  \n",
       "15827     0.0  45.0   0.0  \n",
       "15828     0.0  22.0  38.0  \n",
       "15829     0.0  40.0  38.0  \n",
       "15830     0.0  48.0  38.0  \n",
       "15831     0.0  55.0  38.0  \n",
       "15832     0.0  60.0  38.0  \n",
       "15833     0.0  50.0  23.0  \n",
       "15834     0.0  55.0  38.0  \n",
       "15835     0.0  45.0  38.0  \n",
       "15836     0.0  10.0  38.0  \n",
       "15837     0.0  20.0  38.0  \n",
       "15838     0.0  40.0  38.0  \n",
       "15839     0.0  40.0  38.0  \n",
       "15840     0.0  40.0  38.0  \n",
       "\n",
       "[15841 rows x 14 columns]"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "#切分训练集和测试集\n",
    "Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.3) #70%的数据作为训练集，30%的数据作为测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(11088, 14)"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Xtrain.shape #训练集的数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       " 1.0    5601\n",
       "-1.0    5487\n",
       "Name: 14, dtype: int64"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Ytrain.value_counts() #查看样本标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将训练集带入模型\n",
    "datArr,labelArr = Xtrain.values, Ytrain.values\n",
    "classifierArr = adaBoostTrainDS(datArr,labelArr,10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "加噪音模型在测试集上的准确率为：0.4963181148748159\n"
     ]
    }
   ],
   "source": [
    "#查看模型在测试集上的表现\n",
    "testArr,testlabel = Xtest.values,Ytest.values #测试集的特征矩阵和标签\n",
    "predict10,agg = DPsAdaClassify(testArr,classifierArr,epsilon=0.01)   #模型对测试集的预测结果\n",
    "acc = (predict10.T==testlabel).sum()/len(testlabel) #计算模型的分类准确率\n",
    "print(f'加噪音模型在测试集上的准确率为：{acc}') #打印模型准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优基分类器个数：910\n",
      "模型最高准确率：0.8266358089627603\n"
     ]
    }
   ],
   "source": [
    "# 绘制基分类器个数学习曲线\n",
    "datArr,labelArr = Xtrain.values, Ytrain.values #训练集的特征和标签\n",
    "testArr,testlabel = Xtest.values,Ytest.values  #测试集的特征和标签\n",
    "\n",
    "score0 = [] #测试集上的准确率\n",
    "for i in range(10,1010,100):\n",
    "    classifierArr0 = adaBoostTrainDS(datArr,labelArr,i)\n",
    "    pred0,agg0 = AdaClassify(testArr,classifierArr0)   #模型对测试集的预测结果\n",
    "    acc0 = (pred0.T==testlabel).sum()/len(testlabel) #计算模型在测试集上的准确率\n",
    "    score0.append(acc0)\n",
    "    \n",
    "print(f'最优基分类器个数：{score0.index(max(score0))*100+10}')\n",
    "print(f'模型最高准确率：{max(score0)}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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AQMGMHjwYKZNm9Z496yIUpcFBHgnImZGxPMRMR2YBcyLiN9HxFXA48CxTVLKtmjWLOjQAYYNq3RJzMy22pQpUzjmmGM45phjmDJlCmvWrOGMM87g+uuvZ+bMmcybN29T3rvuuovRo0fz6quvcvXVV/P1r39907Err7yS/v37M3LkSM477zyGDBnCm2++yamnnsr111/PvHnzWLBgAVdffTUAZ511FuPHj2fRokWMGzeOs846C4DbbruNDh06sGjRIiZNmsRf/vIXAO6//36mTZvG4MGDef3115s86AIQEXVuwHHA7cBngclZ2q7AJOB5LCXkAAAeeElEQVRt4HsFeb8LnFHf9ZrLNnLkyGj2vvjFiAsvrHQpzMy2yS677BJ9+/aNnXfeOTp27Bj/+Mc/YvDgwZuO/+EPf4ijjz46IiI2bNgQd999d3zxi1+M0aNHx2677RYREZ/85Cfju9/9bkREzJ8/P/bZZ5+4884747777ovDDz9807UmT54cBx98cKxcuTLat28fa9asiYiINWvWRPv27WPlypXx2GOPxYABA+LSSy+Nv/3tb7Fhw4ZN58+dO3fTZ24PYEaUEIMaqvEuBZYAlwIHSPoosD+ppjw6IjYtjhARF0Ua5VyUpMuy534fyCbgqCvfKZIek/SkpF9KalfrGpcX7EvSjZKmS7pXUt8Gvk/LsH49zJvnZmYza5Gee+45OnXqxOLFi1m0aBHjx49n+vTptGtXE3Lat2+/6f3nPvc5fvrTnzJu3Dh+8YtfFLskgwYNYsKECUydOpWIQNJmx2vv13b44Yczffp09thjD66++mo++tGPbsc33D4NPU70r4j4IrAb8GnSM7uHR8RnI+LlUj9E0gTg/cAY4ALg2nqyXwW8JyIOJfUjn5Bd4zpgQq285wN9suv+iDStZcs3bx5UV8OenoXTzFqeyZMnc/jhh2/af/e7383zzz/PqlWrmDp1KtXV1dx8882bjj/22GOcddZZHHfccfz6178ues1ly5bxwAMPMHLkSI444giqqqp4/PHHWbduHZMmTeKEE06ge/fuHHXUUVx7bQox1157LUcddRTdu3fnyiuv5KabbuKss87i0ksv5Yknatb06dOnD0uXLuWdd95h3bp1rFixoonuTFJSH29EbCDNVnUP0C+reRZul0v632zCjWImALdHxPqImAkMkdS+jryr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\n",
      "text/plain": [
       "<Figure size 525x337.5 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制曲线图\n",
    "plt.figure(figsize=(7,4.5),dpi=75)\n",
    "plt.plot(range(10,1010,100),score0,c='r',alpha=.7,label='AdaBoost')\n",
    "plt.legend(loc=7,frameon=False,fontsize=12)\n",
    "plt.title('AdaBoost分类效果图',fontsize=15)\n",
    "plt.xlabel('决策树的数量',fontsize=13)\n",
    "plt.ylabel('分类器的准确率',fontsize=13)\n",
    "plt.xticks(fontsize=11)\n",
    "plt.yticks(fontsize=11);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优基分类器个数：90\n",
      "模型最高准确率：0.8245318746055124\n"
     ]
    }
   ],
   "source": [
    "# 细化基分类器个数学习曲线\n",
    "score1 = []\n",
    "for i in range(10,210,10):\n",
    "    classifierArr1 = adaBoostTrainDS(datArr,labelArr,i)\n",
    "    predict1,agg1 = AdaClassify(testArr,classifierArr1)   #模型对测试集的预测结果\n",
    "    acc1 = (predict1.T==testlabel).sum()/len(testlabel) #计算模型的准确率\n",
    "    score1.append(acc1)\n",
    "\n",
    "print(f'最优基分类器个数：{score1.index(max(score1))*10+10}')\n",
    "print(f'模型最高准确率：{max(score1)}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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abnlFliwAE46CaS6e00z2ygOXrPakF/L3W03OOecVCMthbZt0wAbv/0t/O1v6ZryOedA8+aleX0zWy8OXrONUbmWO2JEquWWusbZsiWcdx507AgPPwwffwznnw+tWpW2HGZWIwev2YYqZy23kGbN4MwzU/PzPfekjlc/+Um659esMVi8GP79b9hkExgwoLy/bxvBwWu2vlauhL/+Ff7851TTPPtsGDasflxXleCrX0013xtvhAsvTJ2vNtus3CUz23CLF8OoUfDAA+lxzhZbpADOLVtuWT9+D2vg24nM1seMGXDVVTB9eqrlnntu+uWvj8aOTWXdfHP42c+ge/dyl8gg3YM9fjw880yquQ0cmO7p9pejdX388ZrA/eSTFK7HHZcu60yalJYpU2D58nR8mYPY9/FWw8Fr661yLfe00+Dzn6//365feikNMdmmTar59ulT7hI1TbmwHT8eZs1K23r3TsEyb176f9Sv35oRzMoZwitWpMsnm21WvqbcQoF7/PHp38pWrICKihTCr74KkyevG8S77JL+7dq1Tn9nHbzVcPDaennrrXQtd/p02H33dC23vtZyC5k2DS65BFatgh//uPAfL6t9VYXt/vuncN166zSwyuuvp2MmTFgTwn37pnu/Bw5MLRZ1acWKVIZXX03hNXXqmuDaccdUjkGDShPClQN3111T4O6yS/HnWLlyTRBPmrR2EHfpsnaNuJaD2MFbDQevFSVXy733XmjdOtVyDz64/tdyC5k1K3W2+uij1Nt5333LXaK698kncP/9MH8+9OwJvXqlpXPnuvsMZ86EceNSiObCdttt14TX1ltX/dxShfDy5enLWK6GmB+0XbumQOrXD955J5XlvffSvh12WPOlobZDuDYCtyqVg3jKFFi2LO3LBfEZZ9RKJ0QHbzUcvFaj/FruHnukWm6XLuUu1caZNy+F7+zZ6banwYNr79xt29btQCHrIyL1fL399hS6LVqkP7457dqtCeH8ZUMCOWJNzXZDwra6806btibE581L2/v2TeG3PiGcH7S5Gu2KFWlfLmhzzbGVAzUi/Q7kau75ITx4cFo2JoQXLUphWxeBW5XKQTx7dhp8pha+jDl4q+HgtSqtXAl/+Uu6ltvQa7mFLFqUrvW+/nrtnrdLFzjmmHTdu2XL2j33+nj99dSbe9o06NEDTj89/TF/7z34739T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BRQ7LSDAJxExNSImRcTzwDRgRkT8NSKuAJ4CDq7iuQ8C/STdADwMjASGZpMwfCoiXgXuB94E5pFC/qZqynQbcJykq4E/A79ej/fTcEyY4GZmM2tQHn30UQ488EAOPPBAHn30UZYuXcrxxx/Pddddx9SpU5kxY8anx953333079+fd955hyuvvJILL1wzVMRll11G165d6du3L6eddhq9evVi/vz5HH300Vx33XXMmDGD2bNnc+WVVwJw4oknMnToUObMmcOQIUM48cQTAbjzzjtp0aIFc+bMYeTIkfzzn/8E4B//+AfPPfccPXv25L333qvz0AUgIqpcSLXJu4CzgNHZtq1Iwfkx8Ou8Y38FHF/NuVoBR5Cakqt93fVZSNd1jwb2KPY5ffv2jQZj2bKIY46JuPzycpfEzKxo3bt3jy5dusSWW24ZLVu2jCeffDJ69uz56f6//e1v8bnPfS4iIlatWhWjRo2K73znO9G/f//YZpttIiLiG9/4RvzqV7+KiIhZs2bFLrvsEvfcc0889NBDMXDgwE/PNXr06Nhzzz1j0aJF0bx581i6dGlERCxdujSaN28eixYtigkTJkS3bt3ioosuikceeSRWrVr16fPfeuutT19zYwCTo4gMqqnG+wGp5nkRsJukY4HPkGrK/SPi08kRIuK8SL2cqwr45RExKmp50I2I+DhSrfvF2jxvvfHSS7BkiZuZzazBeOWVV2jVqhVz585lzpw5DB06lOeff55mzdZETvPma25s+da3vsWNN97IkCFDuPXWWwudkh49ejB8+HDGjRtHRJC69axReb2ygQMH8vzzz7PDDjtw5ZVXcuyxx27EO9w4Nd1O9EJEfAfYBvgm6Z7dgRFxVkT8txQFbPLcm9nMGpjRo0czcODAT9f33XdfJk2axOLFixk3bhwrV67k5ptv/nT/hAkTOPHEExk2bBj33ntvwXN++OGHPPbYY/Tt25dBgwbxxhtv8NRTT7F8+XJGjhzJYYcdRvv27TnggAO45po0VMQ111zDAQccQPv27bnsssu46aabOPHEE7nooouYOHHNnD6bb745H3zwAZ988gnLly9n4cKFdfSTSYq6xhtp3OZ9gQeALbIRpPKXSyT9Mhtww2qLezObWQP06KOPrhW8++23H2PHjuXOO+/k5JNPpk+fPmy66aaf7r/gggs455xz2GmnnWjZ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\n",
      "text/plain": [
       "<Figure size 525x337.5 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制曲线图\n",
    "plt.figure(figsize=(7,4.5),dpi=75)\n",
    "plt.plot(range(10,210,10),score1,c='r',alpha=.7,label='AdaBoost')\n",
    "plt.legend(loc=7,frameon=False,fontsize=12)\n",
    "plt.title('AdaBoost分类效果图',fontsize=15)\n",
    "plt.xlabel('决策树的数量',fontsize=13)\n",
    "plt.ylabel('分类器的准确率',fontsize=13)\n",
    "plt.xticks(fontsize=11)\n",
    "plt.yticks(fontsize=11);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最优基分类器个数：71\n",
      "模型最高准确率：0.8163265306122449\n"
     ]
    }
   ],
   "source": [
    "# 再次细化基分类器个数学习曲线\n",
    "score2 = []\n",
    "dp005 = []\n",
    "dp01 = []\n",
    "dp025 = []\n",
    "dp05 = []\n",
    "dp075 = []\n",
    "dp1 =[]\n",
    "for i in range(1,102,10):\n",
    "    classifierArr2 = adaBoostTrainDS(datArr,labelArr,i)\n",
    "    predict2,agg2 = AdaClassify(testArr,classifierArr2)   #模型对测试集的预测结果\n",
    "    acc2 = (predict2.T==testlabel).sum()/len(testlabel) #计算模型的准确率\n",
    "    score2.append(acc2)\n",
    "    \n",
    "    pre005,agg005 = DPsAdaClassify(testArr,classifierArr2,0.05)\n",
    "    dpacc005 = (pre005.T==testlabel).sum()/len(testlabel)\n",
    "    dp005.append(dpacc005)\n",
    "    \n",
    "    pre01,agg01 = DPsAdaClassify(testArr,classifierArr2,0.1)\n",
    "    dpacc01 = (pre01.T==testlabel).sum()/len(testlabel)\n",
    "    dp01.append(dpacc01)\n",
    "    \n",
    "    pre025,agg025 = DPsAdaClassify(testArr,classifierArr2,0.25)\n",
    "    dpacc025 = (pre025.T==testlabel).sum()/len(testlabel)\n",
    "    dp025.append(dpacc025)\n",
    "    \n",
    "    pre05,agg05 = DPsAdaClassify(testArr,classifierArr2,0.5)\n",
    "    dpacc05 = (pre05.T==testlabel).sum()/len(testlabel)\n",
    "    dp05.append(dpacc05)\n",
    "    \n",
    "    pre075,agg075 = DPsAdaClassify(testArr,classifierArr2,0.75)\n",
    "    dpacc075 = (pre075.T==testlabel).sum()/len(testlabel)\n",
    "    dp075.append(dpacc075)\n",
    "    \n",
    "    pre1,agg1 = DPsAdaClassify(testArr,classifierArr2,1)\n",
    "    dpacc1 = (pre1.T==testlabel).sum()/len(testlabel)\n",
    "    dp1.append(dpacc1)\n",
    "    \n",
    "\n",
    "print(f'最优基分类器个数：{score2.index(max(score2))*10+1}')\n",
    "print(f'模型最高准确率：{max(score2)}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7338523038081212"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#用单层决策树对数据集进行预测\n",
    "from sklearn.tree import DecisionTreeClassifier as DTC\n",
    "clf = DTC(max_depth=1) #实例化单层决策树\n",
    "clf = clf.fit(Xtrain,Ytrain)\n",
    "score_c = clf.score(Xtest,Ytest)\n",
    "score_c"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "DTC_score = []\n",
    "for i in range(10):\n",
    "    clf = DTC(max_depth=i+1)\n",
    "    clf = clf.fit(Xtrain,Ytrain)\n",
    "    DTC_score.append(clf.score(Xtest,Ytest))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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4fHH4aef4JRT4IwzoGrVzL+HEmJmU9w9p9DtSiLBwsYkexTwo7uPKolzKsGKiBRg3boooY4cGSXOVaugZk044IAoqe6999ZX8y5cGKXZsWOhdesoze68c/HGnyWlLsFmgxKsiEguGzbA559HUv3gA1i+HKpVg/33j3uqv/xlzBcHdxgxAh57LKqde/aEM88svuNnSVETbMW+Ay0iUhG4w5dfRlIdNQoWL4bKlWG//aKk2qlTlFyLmxkcckiUhB95BAYMgI8+gquugl13Lf7zlTIqwYqIlEfu8O23m55VnT8/Et6ee8Y91QMOiHusJRnPyJHQt2+Umk86Cc4+u0yWZlWCFRGpiGbPjkQ2ciTMmhXLdtsNTjwxGixtv3124jKLxL7XXvDPf8LLL0dp9uqrI75ySCVYEZGybv78TSXVaUnfPO3axT3VLl2gcePsxpebe3RY8c9/Rmn2hBPgnHOgevVsR1YkKsGKiJRnixZFkho1CqZMiWUtWkQjooMPjh6WSiuziDFVmn3lFfj447g3m1No3iozVIIVESkrli+Plr8jR8KECVESbNQoSqldusCOO5bNTvdHj4ZHH41eo44/Hs49t1SXZlWCFREpD1atinuV770Xz6yuWwf168Mxx0RS3W23splU0x10UDS+euwxePXVKM326gV77JHtyLaJSrAiItn2009xH3X+fJg3b9PPH36A776DNWugdm3o3DkaCu2xRzxmUx598EE80rNkCRx3HJx3HtSoke2oNqMSrIhIabFy5ebJM3cyXbbs5/s0aBCNkw4+OBLrfvtVjM7zO3eO0mzfvvD669ETVK9esayMUQlWRGRbrViRdwk0tWz58p/vs/32kUAbN47RadJfN2pUJp8PLXYffRTdLS5aBEcfDRdcUCpKsyrBiogUB/dNCTQ9aaa/XrFi833MogTapAn84hebEmgqeSqBFk2nTtGq+PHHYdAg+OSTaGm8117ZjqxIVIIVkYrNPUqYBSXQlSs338cMdthh86SZnkQbNixXo8eUCh9/HKXZH3+Eo46K0mwmuncsApVgRUTy8+23MGRIPOoyb1601E2XSqBNmkQpKr0Kt3HjSKgV4X5oabL//lGa7dcP3norSrO9esE++2Q7snypBCsiFcOKFfGoy5Ah8PXXkUR33RWaN9/8PmiTJpFclUBLr08+gYceiiHxjjwySrO1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+HbbqnVr6NVrq3bdd999mTx5MkOHDuXqq69m/vz5HHPMMTz++ONUqVKFmTNnctFFFzFu3Djat2/Pv/71L3JyNnXc07ZtW0aMGEHbtm2BqAm88sorGThwIAA33XQTV1555cbtn3rqKUaMGMFTTz21cdmsWbO46KKLGD9+PPvssw9PPPEELVu2pFu3bpx66qn069eP7777jltuuYVrrrmmwPfTrVs3rrrqKvr378+4ceOYMmUKAOPGjeOyyy7j22+/5cADD+SZZ56hXr16LFiwgEsvvZTRo0fTqlUrnn76afbYYw8mTJhAly5dNh73+uuv36wqNi9jx47l0ksvZe7cubRr146XXnqJFi1asGDBAs4880wmTJhA/fr1efzxx+natesWX6vVq1fTpk0bfvrpJ9asWcPgwYM5/fTTeeCBBzZ7/3369Nms+vqFF16gd+/eLF26lAsuuIC7774biNsF7o6Z8eijj/L+++/Tvn37At/j1irqcHUAK939C3f/3N0/AaYC0919gLvfDXwAHJ6RKKV0GTcuHsFp2FDJVcqkOnXqsHz5ci666CJefvllZsyYwdy5c3n++ecBOOecczjyyCOZP38+Z5555mYJIC/jx4/n+eefZ9q0aYwfP57Bgwenbo3l67zzzuOQQw5h3rx5dOvWjfPOO2/jukceeYQ333yTt99+mz59+hTpPd14442b3Ytcu3Ytp556Kg888ABz5syhUaNG3H///QBcddVVdO7cmblz59KrV6+N72/x4sXUTXtuvWXLlrRp06bA8/br148bbriBOXPm0LFjRx58MDrZe/bZZ6lSpQrz5s3j4Ycf5q233tqqa1W9enXmzp3LAw88wOmnn77xdUGmTJnCrbfeyqhRo/j6668ZNGgQ7723qSnRE088gbvz2WefseOOOxZ4rG1R2Gg63YlHZN5PW9YcuBk4H3gU+H2yahzwbWbClFJj/PhIrjvsEMm1jFTVSAnaylJlSVqxYgXDhw9n7ty5G0tsa9euZc8992T58uW8//77DBkyBDPjqquuKrSBUrt27ahTpw7XXnst3bp14z//+Q9mlu/2y5cvZ+TIkRuTzrXXXsstt9zC8uXLgUiAzZs3p1mzZixdurRI7+nXv/41p5xyysb5L774gunTp3PSSScBsG7dOg4/PMpAgwcPZsiQIdx77724O1WqRCqoVq0aq1ev3niM119/nTVr1nDyySfne957772X/v37c/HFF/PGG2/Qo0cPADp16sRf/vIX/vjHP9KlSxfuvPPOrbpWW2Po0KHMmjWLffbZB4hS8MSJE+natSsAOTk53HZbfm1si09hJdiFRN/BNxOPyZwO7J3st7u7p5Ir7n69R6tiKa8++yyGmmvQIJJrw4bZjkhkq3z22Wf06tWL/fffn7lz5zJ37lxmz57NLbfc8rPS1IoVK+jbt2+Bx6tfvz6TJ0/myCOPZNiwYey5556sXLlyq+PbaaedALYo8XTu3Plny5o1a7bx/c2ZM2ez9zFmzBjmzp3LvHnz+Oyzzzae96uvvtq4zeuvv05BA6Zs2LCBTp06MWnSJM466yxuvfXWzeL55JNP2Hnnnbnnnns4/fTTgeK/Vvk5+eSTN/vdXnDBpodd8rpWmVDYYzqfuvvVQBvgEuKZ187u/lt3/64kApRSYsIEuP32eATnzjuhUaNsRySyxdavX8+TTz7JxIkTOfvss/niiy8YN24cGzZs4KKLLuL++++nbt26dO7cmYcfjk7h+vfvv9m907wMGzaM008/naOPPpp7772XBQsW8P333+e7fZ06dejSpcvGqs4HHniALl26UKdOHQAqVdqSu3d523XXXalcuTJvvvkmAL179954L/fII4+kb9++uDtvv/02nTp1AuDss8/m3//+N99++y1z5szh1Vdf5bDDDsv3HIsWLeKLL77g+uuvZ/fdd+fFF1/cuO7222+nX79+nHfeedx8882MGRNjwWzptdoahx12GEOGDOG7775jzZo1HHXUUQwYMKBYz1EURfotevQZ/CvgNaCRmfXONfUxs7uSjimkvPn8c7jttkiud90VDZtEypgnn3ySRo0a8eyzzzJkyBAaNmzI888/zznnnEOLFi3YsGED119/PRD3DwcNGkSzZs3o169foQm2W7dutGjRglatWrHLLrtw2WWXbSyF5ueZZ55h2LBhNGnShKFDh/LMM88U11sForp34MCB9OnTh2bNmjF+/HjuueceIBL61KlTad68OTfeeCMvvBCVj506deK+++6je/fu7L///tx0000FlvZ22GEHrrzySnJycujatSsdOnTgyy+/BODiiy9m5MiRNGnShAsvvHDjubfmWm2pnJwc7r33Xg477DDatm3L3nvvzTnnnFOs5yiKAseD3WxDsyXA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\n",
      "text/plain": [
       "<Figure size 525x337.5 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(7,4.5),dpi=75)\n",
    "plt.plot(range(1,11),DTC_score,c='r',alpha=.7,label='DecisionTreeClassifier')\n",
    "plt.legend(loc=7,frameon=False,fontsize=12)\n",
    "plt.title('决策树分类效果随树深变化曲线',fontsize=15)\n",
    "plt.xlabel('树深',fontsize=13)\n",
    "plt.ylabel('分类器的准确率',fontsize=13)\n",
    "plt.xticks(fontsize=11)\n",
    "plt.yticks(fontsize=11);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 525x337.5 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制决策树和adaboost的对比效果图\n",
    "plt.figure(figsize=(7,4.5),dpi=75)\n",
    "plt.plot(range(1,102,10),score2,alpha=.7,marker='<',label='AdaBoost')\n",
    "plt.plot(range(1,102,10),dp005,alpha=.7,marker='d',label='DPsAdaBoost(e=0.05)')\n",
    "plt.plot(range(1,102,10),dp01,alpha=.7,marker='s',label='DPsAdaBoost(e=0.1)')\n",
    "plt.plot(range(1,102,10),dp025,alpha=.7,marker='o',label='DPsAdaBoost(e=0.25)')\n",
    "plt.plot(range(1,102,10),dp05,alpha=.7,marker='^',label='DPsAdaBoost(e=0.5)')\n",
    "plt.plot(range(1,102,10),dp075,alpha=.7,marker='v',label='DPsAdaBoost(e=0.75)')\n",
    "plt.plot(range(1,102,10),dp1,alpha=.7,marker='x',label='DPsAdaBoost(e=1)')\n",
    "\n",
    "plt.hlines(score_c,0,100,colors='b',alpha=.7,linestyles='dashdot',label='DecisionTreeClassifier')\n",
    "plt.legend(loc=4,frameon=False,fontsize=9)\n",
    "plt.title('AdaBoost和决策树在Adult数据集上的对比',fontsize=15)\n",
    "plt.xlabel('决策树的数量',fontsize=13)\n",
    "plt.ylabel('分类器的准确率',fontsize=13)\n",
    "plt.xticks(range(0,102,10),fontsize=11)\n",
    "plt.yticks(fontsize=11)\n",
    "plt.ylim(0.2,0.85)\n",
    "plt.savefig('AdaBoost和决策树在Adult数据集上的对比.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 525x337.5 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#绘制决策树和adaboost的对比效果图\n",
    "plt.figure(figsize=(7,4.5),dpi=75)\n",
    "plt.plot(range(1,102,10),score2,alpha=.7,marker='^',label='AdaBoost')\n",
    "plt.plot(range(1,102,10),dp1,alpha=.7,marker='s',label='DPsAdaBoost')\n",
    "\n",
    "plt.hlines(score_c,0,100,colors='b',alpha=.7,linestyles='dashdot',label='DecisionTreeClassifier')\n",
    "plt.legend(loc=4,frameon=False,fontsize=9)\n",
    "plt.title('AdaBoost和DPsAdaBoost在Adult数据集上的准确率对比',fontsize=15)\n",
    "plt.xlabel('决策树的数量',fontsize=13)\n",
    "plt.ylabel('分类器的准确率',fontsize=13)\n",
    "plt.xticks(range(0,102,10),fontsize=11)\n",
    "plt.yticks(fontsize=11)\n",
    "plt.savefig('AdaBoost和DPsAdaBoost在Adult数据集上的准确率对比.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型在测试集上的准确率为：0.812960235640648\n"
     ]
    }
   ],
   "source": [
    "# 从曲线中可以看出，30个左右的基分类器基本上已达到模型上限\n",
    "classifierArr3 = adaBoostTrainDS(datArr,labelArr,30) #训练30个基分类器的模型\n",
    "predict3,agg3 = AdaClassify(testArr,classifierArr3)   #模型对测试集的预测结果\n",
    "acc3 = (predict3.T==testlabel).sum()/len(testlabel) #计算模型的准确率\n",
    "print(f'模型在测试集上的准确率为：{acc3}') #打印模型准确率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "#epsilon曲线\n",
    "epsilon = [0.05,0.1,0.25,0.5,0.75,1.0]\n",
    "\n",
    "DPscor4 = []\n",
    "for e in epsilon:\n",
    "    classifierArr4 = adaBoostTrainDS(datArr,labelArr,30) #训练30个基分类器的模型\n",
    "    DPpred4,agg4 = DPsAdaClassify(testArr,classifierArr4,e)   #模型对测试集的预测结果\n",
    "    DPacc4 = (DPpred4.T==testlabel).sum()/len(testlabel) #计算模型的准确率\n",
    "    DPscor4.append(DPacc4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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PZtWrVoBcP311/Pcc8/Rpk0batasufm87777Ln/5y19YuXIlHTt25NVXX6V27dqccsopDBgwgA0bNnDZZZdx6aWXbq7H3//+d5555hncnYEDB26+beTIkQwYMIDs7GwuuOACbrvtNsyMQYMGba7/448/zhdffEHr1q1ZtmwZl1xyCePHj6dp06Y888wzdOjQocSvV3GVJAZeAzxkZq1KcJ8xQKaZDQHeAQYDXcysoHamvsD9ZvY5cA9wpbsvBj4A3jazFwldHt8UdF5310qgInHjx8PVV4erk153HVx2mUKFSD61a9dm7dq8Rvj169fz5JNPcvzxxwOhm+Kcc85hyZIlnHbaaYwbNw6ADRs2MGnSJDp37swxxxyzuTtk1KhRvP3220yfPp2hQ4fyxRdfbD73o48+ymOPPcbChQupXr06zz33HACXXnopTzzxBEOGDKFt27Z8+eWXAAwfPpyPP/6YrKwsJk6cyIABA5g7dy4zZ86kb9++vPXWW0yZMoX33ntv87kAnnrqKdyd7777jpYtWwJw1VVX0alTJxYtWkT//v258sork/eiUrIWi5eB+kCWmS0ADHB3LzRouPvGaMXOEwmDLT+PbtqqU8rdJwPHFnD8qugcuwNvu7sDhZ1XpHLLyYFhw2DMGGjaNFxArGnTVNdKKqvitCLk5MC4cdCo0ZYtE7EYLFwYrl1TpURXnyi2devWUbt2baZMmUJGRgbp6el07dqVgQMHAnDkkUcybNgw0tPTOf744+nYsSMAn376KdnZ2bRq1Yrs7GxWrVpF3759+eyzzzj99NOpW7cudevW5biEKwI/9dRTvPbaazz11FOMGzdu87kAzjrrLP7v//6PW2+9lVNPPZU5c+bw9ttvc+GFF1KnTh3q1KnDqlWrABg8eDAnnHAC7aKF7C655BLGjBnDeeedB0BmZuZWY0Tee+89xo4dy3333Ye7UyVJr2dcSVosjgYOANoRpnseHf27Te6+0d1H78iHv7t/7u6j3H1TaZ5XpEJZsgQGDAihoksXeOABhQopP9xDmIhv7kl/yO+++44rr7xy8+DNX375hWHDhlG7dm0Arr32Wl5++WWqV6/OGWecweDBg4HQDXLTTTexaNEipk6dyscff0xubi6xWIy0hHCUHg2QXrVqFQcccAArV67k0ksvpV+/fpvLZGZmsnjxYtLT07ntttvI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\n",
      "text/plain": [
       "<Figure size 600x337.5 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,4.5),dpi=75)\n",
    "plt.plot(epsilon,DPscor4,c='r',alpha=.7,marker='s',label='DPsAdaScore')\n",
    "plt.legend(loc=7,frameon=False,fontsize=12)\n",
    "plt.title('DPsAda分类效果随epsilon变化曲线',fontsize=15)\n",
    "plt.xlabel('epsilon',fontsize=13)\n",
    "plt.ylabel('scores',fontsize=13)\n",
    "plt.xticks(fontsize=11)\n",
    "plt.yticks(fontsize=11)\n",
    "plt.xticks(epsilon)\n",
    "plt.savefig('DPsAda分类效果随epsilon变化曲线.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the Area Under the Curve is:  0.894245921288928\n"
     ]
    }
   ],
   "source": [
    "# 绘制ROC曲线(未添加噪音的30个弱分类器)\n",
    "classifierArr3 = adaBoostTrainDS(datArr,labelArr,30) #训练30个基分类器的模型\n",
    "predict3,agg3 = AdaClassify(datArr,classifierArr3)   \n",
    "plotROC(agg3.T,labelArr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the Area Under the Curve is:  0.7652264183733305\n"
     ]
    }
   ],
   "source": [
    "# 绘制ROC曲线(添加噪音的30个弱分类器)\n",
    "classifierArr4 = adaBoostTrainDS(datArr,labelArr,30) #训练30个基分类器的模型\n",
    "predict4,agg4 = DPsAdaClassify(datArr,classifierArr4,1)   \n",
    "plotROC(agg4.T,labelArr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 样本数量与模型准确率之间的关系\n",
    "acc_train = []\n",
    "acc_test = []\n",
    "for i in range(1000):\n",
    "    xtrain = datArr[:i+1]\n",
    "    ytrain = labelArr[:i+1]\n",
    "    classifierArr4 = adaBoostTrainDS(xtrain,ytrain,30)    #训练30个基分类器的模型\n",
    "    pre1 = adaClassify(xtrain,classifierArr4)             #模型对训练集的预测结果\n",
    "    pre2 = adaClassify(testArr,classifierArr4)            #模型对测试集的预测结果\n",
    "    acc1 = (pre1.T==ytrain).sum()/len(ytrain)             #计算模型对训练集的准确率\n",
    "    acc2 = (pre2.T==testlabel).sum()/len(testlabel)       #计算模型对测试集的准确率\n",
    "    acc_train.append(acc1)\n",
    "    acc_test.append(acc2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 525x337.5 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制样本数量与模型准确率之间的关系图\n",
    "plt.figure(figsize=(7,4.5),dpi=75)\n",
    "plt.plot(range(1000),acc_train,c='r',alpha=.7,label='训练集准确率')\n",
    "plt.plot(range(1000),acc_test,c='b',alpha=.7,label='测试集准确率')\n",
    "plt.legend(loc=4,frameon=False,fontsize=12)\n",
    "plt.title('样本数量与模型准确率之间的关系',fontsize=15)\n",
    "plt.xlabel('样本的数量',fontsize=13)\n",
    "plt.ylabel('分类器的准确率',fontsize=13)\n",
    "plt.xticks(fontsize=11)\n",
    "plt.yticks(fontsize=11);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
